﻿Imports EVOLTA.Promocion.Bl.Bc
Imports EVOLTA.Promocion.Bl.Be
Imports EVOLTA.Promocion.Bl.Ctrl
Imports System.IO
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Data.SqlClient
Imports System.Data
Partial Class mantenedores_cliente
    Inherits System.Web.UI.Page
    Implements System.Web.UI.ICallbackEventHandler
    Private aprobaciones As List(Of Edevolucion) = Nothing
    Private pendientes As List(Of EseparacionVenta) = Nothing
    Private cobranzaDetalle As List(Of EseparacionVentaDetallePagos) = Nothing
    Private cobranzas As List(Of EseparacionVenta) = Nothing
    Private conyugues As List(Of Ecliente) = Nothing
    Dim expression As String = Nothing
    Dim direction As SortDirection = SortDirection.Ascending

#Region "          Formulario                               "
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Response.CacheControl = "no-cache"
        Response.AddHeader("Pragma", "no-cache")
        Response.Expires = -1
        '***********************************************************'
        hdfIdUsuario.Value = Me.Master.idUsuario
        hdfNuevo.Value = "nuevo"
        hdfEmpresa.Value = Me.Master.descEmpresa.Trim
        hdfidProyecto.Value = Me.Master.idProyecto.ToString
        hdfidEtapa.Value = Me.Master.idEtapa.ToString

        If Not IsPostBack Then
            btnBuscar.Attributes.Add("onclick", "CallTheServer('divBuscar@' + document.getElementById('ctl00$ContentPlaceHolder1$txtBuscar').value);")
            cargarProyecto()
            divddlAprobar()
        End If
        AddHandler egvInmuebles.RowCreated, AddressOf egvInmuebles_RowCreated

        Dim cbReference As String
        cbReference = Page.ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData", "null", True)

        Dim callbackScript As String = ""
        callbackScript &= "function CallTheServer(arg)" & _
                          "{" & cbReference & "; }"

        Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "CallTheServer", callbackScript, True)
    End Sub
    Private Sub cargarProyecto()
        selProyecto.DataSource = Rproyecto.SeleccionarTodo(Me.Master.descEmpresa, True)
        selProyecto.DataTextField = "descProyecto"
        selProyecto.DataValueField = "idProyecto"
        selProyecto.DataBind()
        upProyecto.Update()
    End Sub
    Protected Sub gvwLista_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
    Handles gvwLista.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("OnMouseOver", "Resaltar_On(this);")
            e.Row.Attributes.Add("OnMouseOut", "Resaltar_Off(this);")
            e.Row.Style.Add("cursor", "hand")
        End If
    End Sub
    Private Sub divddlAprobar()
        Me.selAprobar.Items.Insert(0, New ListItem("-- SELECCIONAR --", "0"))
        Me.selAprobar.Items.Insert(1, New ListItem("VERIFICADO", "V"))
        Me.selAprobar.Items.Insert(2, New ListItem("RECHAZADO", "R"))
    End Sub
    Private Function obtenerEdit(ByVal pLClientes As System.Linq.IOrderedEnumerable(Of EseparacionVenta)) As String
        Dim datos As New StringBuilder
        datos.Append(pLClientes.ElementAt(0).idSeparacionVenta.ToString + "|")
        datos.Append(pLClientes.ElementAt(0).idEtapa.ToString + "|")
        datos.Append(pLClientes.ElementAt(0).idProyecto.ToString + "|")
        datos.Append(pLClientes.ElementAt(0).cliente.Trim + "|")
        datos.Append(pLClientes.ElementAt(0).inmueble.Trim + "|")
        datos.Append(pLClientes.ElementAt(0).totalSeparacion.ToString + "|")
        datos.Append(pLClientes.ElementAt(0).ctaInicial.ToString + "|")
        datos.Append(pLClientes.ElementAt(0).financiamiento.ToString + "|")
        datos.Append(pLClientes.ElementAt(0).totalPrecioVenta.ToString + "|")
        datos.Append(pLClientes.ElementAt(0).fechaFlagVerificado.Trim)
        Dim wretorno As String = datos.ToString()
        Return wretorno
    End Function
   
#End Region

#Region "          Verificar                                 "
    Protected Function Verificar(ByVal Aprobar As String, ByVal Observacion As String, ByVal pEmpresa As String, ByVal pUsuario As Int32, ByVal idSeparacionVenta As Int32, ByVal idEtapa As Int32, ByVal idProyecto As Int32) As String
        Dim OK As String = Nothing

        OK = RseparacionVenta.VerificarVenta(pEmpresa, Aprobar, Observacion, pUsuario, idSeparacionVenta, idEtapa, idProyecto)
        Return OK
    End Function
#End Region
#Region "          Grilla Gastos                                "
    Protected Function estadoDownload(ByVal dato As String) As Boolean
        If dato.Trim.Length > 0 Then
            Return True
        Else
            Return False
        End If
    End Function
    Protected Function rutaScanner(ByVal idMotivo As String, ByVal archivo As String) As String
        Return String.Format("~/cobranza/evoltaDownload.aspx?idMotivo={0}&filename={1}", idMotivo, archivo)
    End Function
    Private Function cargarCtaCorriente(ByVal idEntidadFin As Int32) As String
        Dim sr As New System.IO.StringWriter()
        Dim htm As New HtmlTextWriter(sr)
        'selNroCuenta.DataSource = RctaCorriente.SeleccionarTodo(Me.Master.descEmpresa, True, idEntidadFin)
        'selNroCuenta.DataTextField = "nroCuenta"
        'selNroCuenta.DataValueField = "idCuenta"
        'selNroCuenta.DataBind()
        'selNroCuenta.RenderControl(htm)
        htm.Flush()
        Return sr.ToString()
    End Function
  
    Private Function cargarPagos(ByVal idProyecto As Int32, ByVal idEtapa As Int32, ByVal idSeparacion As Int32) As String
        Dim sr As New System.IO.StringWriter()
        Dim htm As New HtmlTextWriter(sr)

        Dim separacionVenta As New EseparacionVenta
        With separacionVenta
            .idProyecto = idProyecto
            .idEtapa = idEtapa
            .idSeparacionVenta = idSeparacion
        End With

        Session("cobranza") = cobranzas

        cobranzas = RseparacionVenta.SeleccionarXCobranza2(Me.Master.descEmpresa, separacionVenta)
        Session("cobranza") = cobranzas

        cobranzaDetalle = RseparacionVentaDetallePagos.SeleccionarXCobranza2(Me.Master.descEmpresa, separacionVenta)
        Session("cobranzaDetalle") = cobranzaDetalle
        egvInmuebles.DataSource = cobranzas
        egvInmuebles.DataBind()
        egvInmuebles.RenderControl(htm)
        htm.Flush()

        Return sr.ToString()
    End Function
    'Conexion directa a la base datos para retornar los email
    Public Shared Function EmailVendedor(ByVal descEmpresa As String, ByVal idSeparacionVenta As Int32, ByVal idProyecto As Int32, ByVal idEtapa As Int32) As String
        Dim cuentas As String = Nothing
        Using cn As New SqlConnection(ConfigurationManager.ConnectionStrings(descEmpresa).ConnectionString)
            Using cmd As New SqlCommand("usp_EmailVendedor_sel", cn)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.Add("@idProyecto", SqlDbType.Int).Value = idProyecto
                cmd.Parameters.Add("@idEtapa", SqlDbType.Int).Value = idEtapa
                cmd.Parameters.Add("@idSeparacionVenta", SqlDbType.Int).Value = idSeparacionVenta
                Try
                    cn.Open()
                    Using dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.SingleResult Or CommandBehavior.CloseConnection)
                        If dr.HasRows Then
                            'cuentas = New List(Of EctaCorriente)
                            Do While dr.Read
                                cuentas = dr.GetString(dr.GetOrdinal("email"))
                                'cuentas.Add(cuenta)
                            Loop
                            dr.Close()
                        End If
                    End Using
                Catch ex As Exception
                    Throw
                End Try
            End Using
        End Using

        Return cuentas
    End Function
    Public Shared Function EmailVendedorRechazo(ByVal descEmpresa As String, ByVal idSeparacionVenta As Int32, ByVal idProyecto As Int32, ByVal idEtapa As Int32) As String
        Dim cuentas As String = Nothing
        Using cn As New SqlConnection(ConfigurationManager.ConnectionStrings(descEmpresa).ConnectionString)
            Using cmd As New SqlCommand("usp_EmailRechazoPreminuta_sel", cn)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.Add("@idProyecto", SqlDbType.Int).Value = idProyecto
                cmd.Parameters.Add("@idEtapa", SqlDbType.Int).Value = idEtapa
                cmd.Parameters.Add("@idSeparacionVenta", SqlDbType.Int).Value = idSeparacionVenta
                Try
                    cn.Open()
                    Using dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.SingleResult Or CommandBehavior.CloseConnection)
                        If dr.HasRows Then
                            'cuentas = New List(Of EctaCorriente)
                            Do While dr.Read
                                cuentas = dr.GetString(dr.GetOrdinal("email"))
                                'cuentas.Add(cuenta)
                            Loop
                            dr.Close()
                        End If
                    End Using
                Catch ex As Exception
                    Throw
                End Try
            End Using
        End Using

        Return cuentas
    End Function
    Protected Sub egvInmuebles_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("OnMouseOver", "Resaltar_On(this);")
            e.Row.Attributes.Add("OnMouseOut", "Resaltar_Off(this);")
            Dim strUidSeparacion As String = DataBinder.Eval(e.Row.DataItem, "idSeparacionVenta").ToString()
            Dim egvEstPagoInmueble As GridView = CType(e.Row.FindControl("egvEstPagoInmueble"), GridView)
            If egvEstPagoInmueble IsNot Nothing Then
                AddHandler egvEstPagoInmueble.RowCreated, AddressOf egvEstPagoInmueble_RowCreated
            End If
            If strUidSeparacion.Length > 0 Then
                cobranzaDetalle = Session("cobranzaDetalle")
                Dim LcobranzaDetalles = From pd In cobranzaDetalle _
                                        Where pd.idSeparacionVenta = CType(strUidSeparacion, Int32) _
                                        Order By pd.idEstadoPago Ascending _
                                        Select pd.idSeparacionVenta, pd.idEstadoPago, pd.descEstadoPago Distinct
                If cobranzaDetalle.Count > 0 Then
                    egvEstPagoInmueble.DataSource = LcobranzaDetalles
                    Dim objFila As ExGridView.ExtGridViewRow = CType(e.Row, ExGridView.ExtGridViewRow)
                    objFila.ShowExpand = True
                End If
            End If
        End If
    End Sub
    Protected Sub egvEstPagoInmueble_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("OnMouseOver", "Resaltar_On(this);")
            e.Row.Attributes.Add("OnMouseOut", "Resaltar_Off(this);")
            Dim egvEstPagoDetalle As ExGridView.ExtGridView = CType(e.Row.FindControl("egvPagoDetalle"), ExGridView.ExtGridView)
            If egvEstPagoDetalle IsNot Nothing Then
                AddHandler egvEstPagoDetalle.RowCreated, AddressOf egvPagoDetalle_RowCreated
            End If
            Dim strUidSeparacion As String = DataBinder.Eval(e.Row.DataItem, "idSeparacionVenta").ToString()
            Dim strUidEstadoPago As String = DataBinder.Eval(e.Row.DataItem, "idEstadoPago").ToString()
            If strUidSeparacion.Length > 0 Then
                cobranzaDetalle = Session("cobranzaDetalle")
                Dim LcobranzaDetalles = From pd In cobranzaDetalle _
                                        Where pd.idSeparacionVenta = CType(strUidSeparacion, Int32) AndAlso _
                                              pd.idEstadoPago = CType(strUidEstadoPago, Int32) _
                                        Order By pd.idMotivo, pd.correlativo _
                                        Select pd
                If cobranzaDetalle.Count > 0 Then
                    egvEstPagoDetalle.DataSource = LcobranzaDetalles
                    Dim objFila As ExGridView.ExtGridViewRow = CType(e.Row, ExGridView.ExtGridViewRow)
                    objFila.ShowExpand = True
                End If
            End If
        End If
    End Sub
    Protected Sub egvPagoDetalle_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("OnMouseOver", "Resaltar_On(this);")
            e.Row.Attributes.Add("OnMouseOut", "Resaltar_Off(this);")
        End If
    End Sub

#End Region

#Region "          CallBack                                 "
    Private _callbackArgument As String
    Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
        Return _callbackArgument
    End Function
    Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
        Try
            If eventArgument <> String.Empty Then
                Dim varParams() As String = eventArgument.Split("@")
                Dim sr As New System.IO.StringWriter()
                Dim htm As New HtmlTextWriter(sr)
                _callbackArgument = ""
                Select Case varParams(0)
                    Case "divgvwLista"
                        pendientes = RseparacionVenta.SeleccionarVentaPendiente(Me.Master.descEmpresa, Me.Master.idUsuario)
                        Session("lista") = pendientes
                        Dim listaPendientes = pendientes
                        If Not pendientes Is Nothing Then
                            Me.gvwLista.DataSource = listaPendientes
                            Me.gvwLista.DataBind()
                            Me.gvwLista.RenderControl(htm)
                        End If
                        htm.Flush()
                        _callbackArgument = "Verificar|Verificar|" + sr.ToString()
                    Case "pago"
                        Dim widProyecto = varParams(1).ToString
                        Dim widEtapa = varParams(2).ToString
                        Dim widSeparacion = varParams(3).ToString
                        cobranzaDetalle = Session("cobranzaDetalle")

                        'Dim verificando = (From cb In cobranzaDetalle _
                        '                   Where cb.idMotivo = 1 AndAlso cb.idEstadoPago = 1 _
                        '                   Select cb.idMotivo).Count()

                        'Dim arr As String() = Split(CType(varParams(1).Trim, String), ",")
                        'Dim Lpago = From pd In cobranzaDetalle _
                        '            Where pd.idSeparacionVenta = CType(arr(0), Int32) AndAlso _
                        '                  pd.idSeparacionVentaPago = CType(arr(1), Int32) _
                        '            Select pd
                        _callbackArgument = "pago|pago|" + cargarPagos(widProyecto, widEtapa, widSeparacion)
                    Case "divBuscar"
                        'Session("lista") = pendientes
                        'Me.gvwLista.DataSource = pendientes
                        'Me.gvwLista.DataBind()
                        'Me.gvwLista.RenderControl(htm)
                        'htm.Flush()
                        '_callbackArgument = "divgvwLista|" + sr.ToString()
                        pendientes = RseparacionVenta.SeleccionarVentaPendienteFiltro(Me.Master.descEmpresa, Me.Master.idUsuario, varParams(1), varParams(2), varParams(3), varParams(4))
                        Session("lista") = pendientes
                        Dim listaPendientes = pendientes
                        If Not pendientes Is Nothing Then
                            Me.gvwLista.DataSource = listaPendientes
                            Me.gvwLista.DataBind()
                            Me.gvwLista.RenderControl(htm)
                        End If
                        htm.Flush()
                        _callbackArgument = "divgvwLista|divgvwLista|" + varParams(0).ToString + "|" + sr.ToString()
                    Case "showDet"
                        pendientes = Session("lista")
                        Dim widProyecto As Int32 = varParams(1)
                        Dim widEtapa As Int32 = varParams(2)
                        Dim widSeparacionVenta As Int32 = varParams(3)

                        Dim wSr = obtenerEdit(From c In pendientes _
                                                                    Where c.idProyecto = widProyecto And _
                                                                          c.idEtapa = widEtapa And _
                                                                          c.idSeparacionVenta = widSeparacionVenta _
                                                                    Select c _
                                                                    Order By c.idProyecto)

                        _callbackArgument = "detalle|showDet|Pendiente [Modificar]|" + wSr
                    Case "Verificar"
                        Dim wAprobar As String = varParams(1)
                        Dim wObservacion As String = varParams(2)
                        Dim wpEmpresa As String = varParams(3)
                        Dim wpUsuario As String = varParams(4)
                        Dim widSeparacionVenta As String = varParams(5)
                        Dim widEtapa As String = varParams(6)
                        Dim widProyecto As String = varParams(7)
                        Dim EmailV As String
                        Dim OK As String

                        pendientes = Session("lista")

                        Dim CobranzaVerificado = (From c In pendientes _
                                                                    Where c.idProyecto = widProyecto And _
                                                                          c.idEtapa = widEtapa And _
                                                                          c.idSeparacionVenta = widSeparacionVenta _
                                                                    Select c _
                                                                    Order By c.idProyecto)
                        Dim Proyecto As String
                        Dim Etapa As String
                        Dim Inmueble As String
                        Dim Cliente As String
                        Dim Vendedor As String
                        Dim Fecha As String
                        Proyecto = CobranzaVerificado.ElementAt(0).descProyecto.Trim
                        Etapa = CobranzaVerificado.ElementAt(0).descEtapa.Trim
                        Inmueble = CobranzaVerificado.ElementAt(0).inmueble.Trim
                        Cliente = CobranzaVerificado.ElementAt(0).cliente.Trim
                        Vendedor = CobranzaVerificado.ElementAt(0).nombreVendedor.Trim
                        Fecha = Day(Now).ToString + "/" + Month(Now).ToString + "/" + Year(Now).ToString
                        OK = Verificar(wAprobar, wObservacion, wpEmpresa, wpUsuario, widSeparacionVenta, widEtapa, widProyecto)
                        If wAprobar = "V" Then
                            If OK = "1" Then
                                'Recuperar el email del vendedor del inmueble
                                EmailV = EmailVendedor(wpEmpresa, widSeparacionVenta, widProyecto, widEtapa)
                                '***** ENVIO DE EMAIL **********
                                Dim correo As Boolean
                                Dim wVerificado = "APROBADO"
                                If wAprobar = "R" Then wVerificado = "RECHAZADO"
                                Dim wBody = "Se ha " + wVerificado + " la Minuta de Compra Venta de :" + "<br><br>"
                                wBody = wBody + "PROYECTO/ETAPA : " + Proyecto + "/" + Etapa + "<br>"
                                wBody = wBody + "INMUEBLES : " + Inmueble + "<br>"
                                wBody = wBody + "CLIENTE : " + Cliente + "<br>"
                                wBody = wBody + "VENDEDOR : " + Vendedor + "<br>"
                                'wBody = wBody + "Estado : " + wVerificado + "<br>"
                                wBody = wBody + "FECHA : " + Fecha + "<br><br><br>"
                                wBody = wBody + "Por favor no responda a éste e-mail, cualquier observación o sugerencia comunicarse a <u>soporte@evolta.pe</u><br><br>"
                                wBody = wBody + "<b>EVOLTA</b><br>"
                                wBody = wBody + "<i>Su socio estratégico en el negocio inmobiliario</i><br>"
                                Dim Asunto = wpEmpresa + "/" + Proyecto + ": Se ha aprobado la minuta del inmueble:" + Inmueble
                                correo = Rsendemail.SendMail(EmailV, Asunto, wBody)
                                '***** FIN ENVIO EMAIL ********
                            End If
                        End If
                        If wAprobar = "R" Then
                            'Recuperar el email del vendedor del inmueble
                            EmailV = EmailVendedorRechazo(wpEmpresa, widSeparacionVenta, widProyecto, widEtapa)
                            '***** ENVIO DE EMAIL **********
                            Dim correo As Boolean
                            Dim wVerificado = "RECHAZADO"
                            Dim wBody = "Se ha rechazado la Minuta de Compra Venta de :" + "<br><br>"
                            wBody = wBody + "PROYECTO/ETAPA : " + Proyecto + "/" + Etapa + "<br>"
                            wBody = wBody + "INMUEBLE : " + Inmueble + "<br>"
                            wBody = wBody + "CLIENTE : " + Cliente + "<br>"
                            wBody = wBody + "VENDEDOR : " + Vendedor + "<br>"
                            'wBody = wBody + "Estado : " + wVerificado + "<br>"
                            wBody = wBody + "FECHA : " + Fecha + "<br><br><br>"
                            wBody = wBody + "Por favor no responda a éste e-mail, cualquier observación o sugerencia comunicarse a <u>soporte@evolta.pe</u><br><br>"
                            wBody = wBody + "<b>EVOLTA</b><br>"
                            wBody = wBody + "<i>Su socio estratégico en el negocio inmobiliario</i><br>"
                            Dim Asunto = wpEmpresa + "/" + Proyecto + ": Se ha rechazado la minuta del inmueble:" + Inmueble
                            correo = Rsendemail.SendMail(EmailV, Asunto, wBody)
                            '***** FIN ENVIO EMAIL ********
                        End If
                        'Recarga Grilla con nuevos datos
                        pendientes = RseparacionVenta.SeleccionarVentaPendiente(Me.Master.descEmpresa, Me.Master.idUsuario)
                        Session("lista") = pendientes
                        Dim listaPendientes = pendientes
                        If Not pendientes Is Nothing Then
                            Me.gvwLista.DataSource = listaPendientes
                            Me.gvwLista.DataBind()
                            Me.gvwLista.RenderControl(htm)
                        End If
                        htm.Flush()
                        _callbackArgument = "detalle|Verificar|" + sr.ToString()
                    Case "delete"
                        Dim pCliente As New Ecliente
                        With pCliente
                            .idCliente = CType(varParams(1), Int32)
                            .idUsuario = Me.Master.idUsuario
                        End With
                        Rcliente.EliminarMantenedor(Me.Master.descEmpresa, pCliente)
                End Select
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
#End Region

End Class
